home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / util / cmdbsrch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  971 b   |  47 lines

  1. /* cmdbsrch.c: binary search of tables */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/util/RCS/cmdbsrch.c,v 6.0 1991/12/18 20:25:18 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/util/RCS/cmdbsrch.c,v 6.0 1991/12/18 20:25:18 jpo Rel $
  9.  *
  10.  * $Log: cmdbsrch.c,v $
  11.  * Revision 6.0  1991/12/18  20:25:18  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "util.h"
  17. #include <isode/cmd_srch.h>
  18.  
  19.  
  20. cmdbsrch (str, cmd, entries)        /* binary version of cmdsrch */
  21. char *str;            /* test string  */
  22. CMD_TABLE cmd[];        /* table of known commands */
  23. int entries;            /* size of cmd table */
  24. {
  25.     register int hi, lo, mid;
  26.     register int diff;
  27.     char *p;
  28.  
  29.     hi = entries-1;
  30.     lo = 0;
  31.  
  32.     for (mid=(hi+lo)/2 ; hi >= lo; mid=(hi+lo)/2)
  33.     {
  34.         p = cmd[mid].cmd_key;
  35.         if ((diff = chrcnv[*str] - chrcnv[*p]) == 0 &&
  36.             (diff = lexequ(str, p))==0)
  37.             return(cmd[mid].cmd_value);
  38.  
  39.         if (diff < 0)
  40.             hi = mid - 1;
  41.         else
  42.             lo = mid+1;
  43.     }
  44.  
  45.     return(cmd[entries].cmd_value);
  46. }
  47.